簡介
Swarm 是使用 Objective C語言開發的,在早期的版本中編寫Swarm的應用程式也使Objective C,從Swarm 2.0版開始提供了對Java語言的支持,將來可能支持JavaScript、C++、Python、Perl等語言。Swarm的最新版本 Swarm 2.1.1可以在不同版本的Unix、Linux、Windows95、Windows98、WindowsNT、Windows2000環境下運行。
社會經濟系統的仿真,是建立在複雜適應系統(Complex Adaptive System 簡稱CAS)理論研究基礎上的。通過“相對簡單的微觀個體活動可以突現出巨觀層面的複雜行為”,給社會科學的研究與實踐乘上當代新技術的航班打開了通路。
作用
從1994年開始,桑塔費研究所(SFI)開展了一個研究項目,以開發一個工具集用來幫助科學家們分析複雜適應系統,這個模擬工具集就叫做Swarm。1995年,SFI發布了Swarm的beta版。
用戶可以使用Swarm提供的類庫構建模擬系統,使系統中的主體和元素通過離散事件進行互動。由於Swarm沒有對模型和模型要素之間的互動作任何約束,Swarm應當可以模擬任何物理系統或社會系統。事實上,在各個廣泛的研究領域都有人在用Swarm編寫程式,這些領域包括生物學、經濟學、物理學、化學和生態學等。
Swarm項目的目的就是通過科學家和軟體工程師的合作製造一個高效率的、可信的、可重用的軟體實驗儀器。它能給予科學家們一個標準的軟體工具集,就象提供了一個設備精良的軟體實驗室,幫助人們集中精力於研究工作而非製造工具。
Swarm實際上是一組用Objective-C語言寫成的類庫,這是一種面向對象的C語言。一部分圖形界面,如圖表、按鈕和視窗是用TCL/TK描述的。Swarm最初只能在Unix作業系統和X Windows界面下運行,1998年四月,伴隨著 1.1版的發布,Swarm推出了可以在Windows 95/98/NT上運行的版本。1999年,Swarm又提供了對Java的支持,從而使Swarm越來越有利於非計算機專業的人士使用。
對象
大多數Swarm的模擬程式包括四類對象。ModelSwarm、ObserverSwarm、模擬主體和環境。其中的ModelSwarm和ObserverSwarm是swarm類的子類。swarm類是Swarm模擬的基本構造塊,一個swarm是一系列對象以及這些對象的行為時間表的組合。模擬主體通常從SwarmObject中繼承方法以提供對探測器和記憶體管理的支持。不同的模擬系統具有不同的環境,例如生態系統通常是一個二維的平面環境,如Swarm中提供的Grid2D。
ModelSwarm
通常情況下,Swarm套用包括兩個swarm對象,位於核心的是ModelSwarm,一個封裝了被模擬的模型的swarm對象。ModelSwarm中的每一個對象對應模型世界中的每一個主體。當用戶定義了全部對象並為它們建立起關係後,建模的最後一步就是把這些主體放到這個ModelSwarm對象中。
除了作為對象的集合,ModelSwarm還包括模型中行為的時間表。用戶需要為這些主體編寫一個時間表,通過產生一系列具有特定順序的行為來體現模型中的時間。時間表可以通過產生activity 庫中的schecule類的實例對象來建立,在其中填入排好序的對象/訊息對。建好時間表,Swarm模型就可以運行了。
ModelSwarm還包括一系列輸入和輸出。輸入的是模型參數:如對象的個數,初始值等。輸出的是要觀測的變數的值及模型的運行結果。
ObserverSwarm
對於計算機模擬來說,只有一個可以運行的模型是沒有什麼用處的,我們還需要數據收集工具來觀察模型並記錄發生了什麼。在Swarm中,觀察是通過ObserverSwarm對象來實現的。ObserverSwarm是一個特殊的對象,可以通過探測器接口觀察其它個體。例如,一個探測器可以觀察商品的平均價格,並建立一個時序圖來跟蹤其動態變化。另一個探測器可以跟蹤居民的平均收入,並將數據儲存到一個檔案中以備日後分析使用。
ObserverSwarm也是一個swarm ,因此它也包括一組個體和一個行為時間表。ObserverSwarm的個體是用來觀測的探測器及輸出界面,如圖表,二維格點等。其行為時間表則描述各探測器採樣的間隔和順序。通過將一個模型的ModelSwarm 和ObserverSwarm合併在一起,一個完整的實驗模型就建立起來了。通過使用ModelSwarm和ObserverSwarm ,可將模型的界面和模型的實現分離,模型自身仍然是純的,就像一個玻璃罩下的世界。不同的ObserverSwarm可用來實現不同的數據收集和實現控制協定,但是模型本身沒有發生變化。
模擬主體
模型中模擬的主體與現實中的經濟參與這是一一對應的。例如,在經濟模型中需要定義消費者、公司甚至政府、銀行等。模擬主體通常作為一組對象在模擬系統中存在,我們要根據現實的情況給它們定義方法和屬性。在一個複雜適應系統中,模擬主體應當具有學習和進化的能力。這就需要在主體中定義一個獨立的具有認知能力的部件(可以是一個子對象也可以是一個方法)來處理來自環境的刺激並做出反應。學習或進化的過程可以採用神經網路或遺傳算法等方法來模擬。
環境
在模型中,模擬主體通常生活在一個環境中。許多模擬平台將這一環境限定為某一個特定類型,如最常用的是二維格線。Swarm的一個特點在於不必設計一個特定類型的環境。在Swarm中,環境本身自身也是一個主體,用面向對象的術語來說就是一個對象。例如,在經濟系統中,市場就是一個環境。消費者和商家通過市場來詢價和報價,他們的交易也在市場中得到撮合。市場這個主體在模型中可能有一些不同於其他主體的特殊的方法和屬性,如市場的參與者或市場的狀態等。但是在Swarm這個模擬系統中它的處理與其他主體沒什麼區別。
在這裡,我們簡要地介紹了套用Swarm模擬的邏輯結構,希望讀者可以對Swarm從整體上有一個了解。欲了解使用Swarm各部分的詳細情況,請參閱Swarm庫文檔和例子程式。這些工具的完整文檔可以在Swarm的官方主頁上找到。
類庫
對於大多數用戶來說,Swarm中提供的大部分類可以直接使用。為了建立起一個模擬環境,用戶需要構造一些對象,用來表示現實生活中的主體。在大多數情況下,這些對象都可以基於Swarm中存在的類,這樣就免去了用戶大量事務性的工作。以下是對Swarm中提供的幾個主要的類庫的簡介。
Swarmobject 庫包括兩個重要的類,swarmobject 和swarm。Swarmobject 是所有模擬主體的根類,它定義了記憶體管理的接口並提供對探測器的支持。Swarm類是模型的總控,ModelSwarm和ObserverSwarm都從這一基類處繼承有用的代碼。
Activity庫提供了對時間表的支持。時間表是模型運行的時序列表,用戶可以將周期性執行的動作按順序放入這個數據結構中,並指明運行間隔和觸發條件,模型就可以按照這個約定運行而不需人為的干預。
simtools庫中包括支持探測器的類,這樣就可以在模型的運行過程中觀察或修改變數。Simtools還提供數據分析和顯示支持的工具,能夠產生統計數據匯總,畫時序圖等等。
Collections中提供了一系列對象的列表,如List、Array、Set等。Swarm支持向一個列表中的所有對象傳遞訊息,還可以將列表中的對象按某個屬性排序。
Defobj中提供了對訊息、錯誤處理、調試和記憶體分配的支持,增強了 Objective-C的功能。它還支持對象界面和實現分離,從而使Swarm編寫的程式的層次性更加清晰。
Random庫提供給用戶一套隨機數生成器。在計算機模擬中,隨機數生成器的質量是絕對重要的。如果生成的隨機數有偏差或具有相關性,很容易產生錯誤結果。Swarm的隨機數庫支持常態分配、均勻分布、指數分布等多種隨機分布。
Space是一個簡單的空間庫,包括一系列用於二維離散模型的類。這些空間類型在生態系統模擬中經常用到。Space 中的類大多數是從Grid2D,一個可以在指定格點上存儲對象和整型值的二維數組繼承得來。